package thread;

import java.util.Scanner;

public class ThreadDemo23 {
    private volatile static int flag = 0;//valatile,强制读取内存,就可以使得优化被强制关闭
    public static void main(String[] args) {
        Thread t1 = new Thread(() ->{
           while(flag == 0) {//核心指令:1.load,2.条件跳转指令
               //load执行太多了而且没输入之前,里面是一样的值,jvm就优化干掉load,只剩下条件跳转指令
               //t2修改了内存,但是t1没有看到这个内存的变化,这个成为"内存可见性问题"
               //循环体里面什么也不写
//               try {//写了这个就又不同了
//                   Thread.sleep(10);
//               } catch (InterruptedException e) {
//                   throw new RuntimeException(e);
//               }
           }

            System.out.println("t1线程结束");
        });
        Thread t2 = new Thread(() ->{
            System.out.println("请输入 flag 的值: ");
            Scanner scanner = new Scanner(System.in);
            flag = scanner.nextInt();
            //只要t2线程输入不为0,就可以使得t1线程结束,但是实际上没有结束
            //这个
        });

        t1.start();
        t2.start();
    }
}
